package com.anfeng.cms.service.impl.org;

import com.anfeng.cms.common.Common;
import com.anfeng.cms.domain.org.AfJob;
import com.anfeng.cms.repository.mysql.dao.org.AfJobMapper;
import com.anfeng.cms.service.org.IAfJobService;
import com.anfeng.cms.util.IdGeneratorUtil;
import com.anfeng.cms.util.JsonMapper;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;

import java.util.Date;
import java.util.List;

/**
 * <p>
 *  服务实现类
 * </p>
 *
 * @author 吴朋
 * @since 2019-07-15
 */
@Service
@Slf4j
public class AfJobServiceImpl extends ServiceImpl<AfJobMapper, AfJob> implements IAfJobService {


    /**
     * 根据工种名称新增工种信息
     *
     * @param name 工种名字
     * @return 工种id
     */
    @Override
    public String addJob(String name) {
        if (StringUtils.isBlank(name)) {
            log.error("新增工种信息失败 传入参数为空");
            return null;
        }
        // 先查询是否存在
        AfJob afJob = this.getJobByName(name);
        if (null != afJob) {
            return afJob.getId();
        }
        // 不存在就新增
        afJob = new AfJob();
        String jobId = IdGeneratorUtil.uuid();
        afJob.setId(jobId);
        afJob.setName(name);
        afJob.setState(Common.DATA_STATE_NORMAL);
        Date currentDate = new Date();
        afJob.setCreateTime(currentDate);
        afJob.setModifiedTime(currentDate);
        boolean result = this.insert(afJob);
        if (!result) {
            log.error("新增工种信息失败 工种名称 {}", name);
            return null;
        }
        return jobId;
    }

    /**
     * 修改工种是否禁用
     *
     * @param jobId 工种id
     * @param state 是否禁用
     * @return 修改状态
     */
    @Override
    public int updateJobState(String jobId, Integer state) {
        if (StringUtils.isBlank(jobId) || state == null || (state != Common.DATA_STATE_NORMAL && state != Common.DATA_STATE_DELETE)) {
            log.error("更新工种是否禁用状态出错 传入参数 有误");
            return Common.RETURN_FAILED;
        }
        // 根据job id 查询 工种信息
        AfJob afJob = this.selectById(jobId);
        if (null == afJob) {
            log.error("根据工种id {} 未查询到相关工种信息", jobId);
            return Common.RETURN_FAILED;
        }
        // 存在 判断状态是否一致
        if (state.equals(afJob.getState())) {
            log.info("修改是否禁用 状态一致  无需修改");
            return Common.RETURN_SUCCESS;
        }
        afJob.setState(state);
        afJob.setModifiedTime(new Date());
        boolean result = this.updateById(afJob);
        if (!result) {
            log.error("更新工种禁用状态失败 jobId:{}  state:{}", jobId, state);
            return Common.RETURN_FAILED;
        }
        return Common.RETURN_SUCCESS;
    }

    /**
     * 获取所有的工种信息
     *
     * @return 职位信息
     */
    @Override
    public List<AfJob> getAllJobs() {
        AfJob afJob = new AfJob();
        afJob.setState(Common.DATA_STATE_NORMAL);
        EntityWrapper<AfJob> wrapper = new EntityWrapper<>();
        wrapper.setEntity(afJob);
        return this.selectList(wrapper);
    }

    /**
     * 根据工种名称 获取工种信息
     *
     * @param jobName 工种名称
     * @return 工种信息
     */
    @Override
    public AfJob getJobByName(String jobName) {
        if (StringUtils.isBlank(jobName)) {
            log.error("根据工种名称查询工种信息 传入参数有误");
            return null;
        }
        AfJob afJob = new AfJob();
        afJob.setState(Common.DATA_STATE_NORMAL);
        afJob.setName(jobName);
        EntityWrapper<AfJob> wrapper = new EntityWrapper<>();
        wrapper.setEntity(afJob);
        return this.selectOne(wrapper);
    }

    /**
     * 更新工种 信息
     *
     * @param afJob 工种信息
     * @return 是否成功 1 成功 -1 失败
     */
    @Override
    public int updateJobInfo(AfJob afJob) {
        if (null == afJob || StringUtils.isBlank(afJob.getId())) {
            log.error("更新工种信息 传入参数有误");
            return Common.RETURN_FAILED;
        }
        afJob.setModifiedTime(new Date());
        boolean result = this.updateById(afJob);
        if (!result) {
            log.error("更新工种信息失败 工种信息 {}", JsonMapper.defaultMapper().toJson(afJob));
            return Common.RETURN_FAILED;
        }
        return Common.RETURN_SUCCESS;
    }

    /**
     * 根据id 查询工种
     *
     * @param jobId 工种id
     * @return 工种信息
     */
    @Override
    public AfJob getJobById(String jobId) {
        if (StringUtils.isBlank(jobId)) {
            log.error("根据工种Id查询工种信息 传入参数有误");
            return null;
        }
        AfJob afJob = new AfJob();
        afJob.setState(Common.DATA_STATE_NORMAL);
        afJob.setId(jobId);
        EntityWrapper<AfJob> wrapper = new EntityWrapper<>();
        wrapper.setEntity(afJob);
        return this.selectOne(wrapper);
    }
}
